"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 11、lambda匿名函数.py
"""

# lambda：没有名字的函数，不需要费神去定义且只用一次。可以指定一个短小的回调函数

# 求园的面积，常规操作
import math


def circlr_area(r):
    result = math.pi * r ** 2
    return result


# 面积用变量接受并打印
a = circlr_area(2)
print(f'圆的面积为{a}')  # 圆的面积为12.566370614359172

# lambda表达式
"""
语法 : result = lambda[ arg1 [arg2,...argn]]:expression
    1、result : 调用 lambda 表达式
    2、[ arg1 [arg2,...argn]] :  可选，指定要传递的参数列表
    3、expression ： 必选，指定一个实现具体功能的表达式
引用 lamada 时 ： result(参数)
"""
r = 2
result = lambda r: math.pi * r * r
print(f'半径是{r}圆的面积为{result(r)}')  # 半径是2圆的面积为12.566370614359172
# 函数的存放地址 ： <function <lambda> at 0x0000026936830310>
print(lambda r: math.pi * r * r)

# 短小的回调函数  ：  对于获取到的信息进行排序
bookinfo = [
    ('python 零基础入门', 22.5),
    ('java 零基础入门', 20),
    ('测试开发中高级', 100)]

print(bookinfo)  # 结果为 ： [('python 零基础入门', 22.5), ('java 零基础入门', 20), ('测试开发中高级', 100)]
# 按照价格去排序  lambda x:(x[1])返回了列表中每个元组的第二个元素：价格
bookinfo.sort(key=lambda x: (x[1]))
print(bookinfo)  # 结果为：[('java 零基础入门', 20), ('python 零基础入门', 22.5), ('测试开发中高级', 100)]
